﻿<?php
function pre($args){
 echo '<pre>';
 print_r($args);
 echo '</pre>';
}
class Person{
	/** type=text private */  
	private $__allowDynamicAttributes =false;
	
	protected $id=0;
	/** type=primary_autoincrement */  
	protected $name='yfl';
	/** type=text null */  
	protected $biography=554665488;
	
	public function __construct($array){
		//var_dump($array);
	}
		public function getId()  
		{  
            return $this->id;  
        }  
        public function setId($v)  
        {  
            $this->id = $v;  
        }  
        public function getName()  
        {  
            return $this->name;  
        }  
        public function setName($v)  
        {  
            $this->name = $v;  
        }  
        public function getBiography()  
        {  
            return $this->biography;  
        }  
        public function setBiography($v)  
        {  
            $this->biography = $v;  
        }  
	
}
//接下来反射它，只要把类名"Person"传递给ReflectionClass就可以了

$class=new ReflectionClass('Person'); //建立 Person这个类的反射类  

//var_dump($class);//  object(ReflectionClass)#1 (1) { ["name"]=> string(6) "Person" }
$args=array(1,2);
$instance=$class->newInstanceArgs($args);  //相当于实例化Person 类  

//1) 获取类的属性
$attrs=$class->getProperties();
// echo '<pre>';
// print_r($attrs);
// echo '</pre>';
//var_dump($attrs);

foreach($attrs as $attr){
	// pre($attr);
	// echo  $attr->getName()."\n";
}

//获取注释

// foreach($attrs as $attr){
	// if($attr->isProtected()){
		// $docblack=$attr->getDocComment();
		// echo $docblack;
		// preg_match('/type\=([a-z_]*)/',$docblack,$matches);
		// pre($matches);
	// }
// }
//获取类的方法 
$metches=$class->getMethods();
// pre($metches);
//调用类的方法
// echo $instance->getBiography();  //执行Person 里的方法getBiography
//或者
$call=$class->getmethod('getName');  // //获取Person 类中的getName方法  
echo $call->invoke($instance);////执行getName 方法  



















